﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.VisualStudio.Shell;
using DotConsulting.VisualStudio.BuildOutputCopy.View;
using DotConsulting.VisualStudio.BuildOutputCopy.ViewModel;
using EnvDTE;
using EnvDTE80;
using Microsoft.VisualStudio;

namespace DotConsulting.VisualStudio.BuildOutputCopy
{
    /// <summary>
    /// This class implements the tool window exposed by this package and hosts a user control.
    ///
    /// In Visual Studio tool windows are composed of a frame (implemented by the shell) and a pane, 
    /// usually implemented by the package implementer.
    ///
    /// This class derives from the ToolWindowPane class provided from the MPF in order to use its 
    /// implementation of the IVsUIElementPane interface.
    /// </summary>
    [Guid("5de195c8-749d-4d4c-aedd-ad79789841ba")]
    public class MyToolWindow : ToolWindowPane, IVsWindowFrameNotify3
    {
        /// <summary>
        /// Standard constructor for the tool window.
        /// </summary>
        public MyToolWindow() :
            base(null)
        {
            // Set the window title reading it from the resources.
            this.Caption = Resources.ToolWindowTitle;
            // Set the image that will appear on the tab of the window frame
            // when docked with an other window
            // The resource ID correspond to the one defined in the resx file
            // while the Index is the offset in the bitmap strip. Each image in
            // the strip being 16x16.
            this.BitmapResourceID = 301;
            this.BitmapIndex = 1;

            // This is the user control hosted by the tool window; Note that, even if this class implements IDisposable,
            // we are not calling Dispose on this object. This is because ToolWindowPane calls Dispose on 
            // the object returned by the Content property.

            var view = new BuildOutputCopyView();
            base.Content = view;

        }

        //protected override void OnCreate()
        //{
        //    base.OnCreate();
        //    var dte = this.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
        //    ((BuildOutputCopyView)base.Content).DataContext = new BuildOutputCopyViewModel(dte.Solution);
        //}



        public int OnClose(ref uint pgrfSaveOptions)
        {
            return VSConstants.S_OK;
        }

        public int OnDockableChange(int fDockable, int x, int y, int w, int h)
        {
            return VSConstants.S_OK;
        }

        public int OnMove(int x, int y, int w, int h)
        {
            return VSConstants.S_OK;
        }

        public int OnShow(int fShow)
        {
            var dte = this.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
            if (((BuildOutputCopyView)base.Content).DataContext == null)
            {
                ((BuildOutputCopyView)base.Content).DataContext = new BuildOutputCopyViewModel(dte.Solution);
            }
            return VSConstants.S_OK;
        }

        public int OnSize(int x, int y, int w, int h)
        {
            return VSConstants.S_OK;
        }
    }
}
